package com.hzp.micromall.admin.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.hzp.micromall.admin.dto.UmsAdminDto;
import com.hzp.micromall.admin.dto.UpdateAdminPasswordParam;
import com.hzp.micromall.admin.entity.UmsMenu;
import com.hzp.micromall.admin.entity.UmsRole;
import com.hzp.micromall.common.core.api.CommonPage;
import com.hzp.micromall.common.core.api.CommonResult;
import com.hzp.micromall.admin.dto.UmsAdminParam;
import com.hzp.micromall.admin.entity.UmsAdmin;
import com.hzp.micromall.common.core.api.ResultCode;
import com.hzp.micromall.common.core.entity.UserDto;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * @Author houzipeng
 * @Date 2022/2/16 23:05
 * @Version 1.0
 */
public interface UmsAdminService {

    /**
     * 注册功能
     * @param adminParam
     * @return
     */
    @Transactional
    UmsAdmin register(UmsAdminParam adminParam);

    /**
     * 登录功能
     * @param username 用户名
     * @param password 密码
     * @return 调用认证中心返回结果
     */
    CommonResult login(String username, String password);

    /**
     * 根据用户名获取用户信息
     */
    UmsAdmin getAdminByUsername(String username);

    /**
     * 获取用户信息
     */
    UserDto loadUserByUsername(String username);

    /**
     * 获取用户对于角色
     */
    List<UmsRole> getRoleList(Long adminId);

    /**
     * 获取当前登录后台用户
     */
    UmsAdmin getCurrentAdmin();

    /**
     * 根据用户名或昵称分页查询用户
     */
    CommonPage<UmsAdmin> list(String keyword, Integer pageSize, Integer pageNum);

    CommonPage<UmsAdminDto> page(String keyword, Integer pageSize, Integer pageNum);

    /**
     * 根据管理员ID获取对应菜单
     */
    List<UmsMenu> getMenuList(Long adminId);

    /**
     * 根据用户id获取用户
     */
    UmsAdmin getAdminById(Long id);

    /**
     * 根据修改指定后台用户信息
     */
    @Transactional
    int updateAdminById(Long id, UmsAdmin admin);

    /**
     * 修改密码
     */
    @Transactional
    ResultCode updatePassword(UpdateAdminPasswordParam param);

    /**
     * 修改用户角色关系
     */
    @Transactional
    int updateAdminRoleRelation(Long adminId, List<Long> roleIds);


    /**
     * 根据用户Id删除指定用户
     */
    @Transactional
    int deleteAdminById(Long id);



}
